<div style="font-size:10.5pt;line-height:1.5;background-color:#FCF2E0;padding:10px;">
<h1 style="font-size:24pt;text-align:center;"><span>联盟公证处(珠蚌)抛砖引玉版</span></h1>
<p class="MsoNormal" style="text-align:center;"><span>通用标识：UnionidNotary</span></p>
<p class="MsoNormal" style="text-align:center;"><span>珠蚌工作室：www.Unionid.net</span></p>

<h2 style="text-align:center;"><span>引言</span></h2>
<p class="MsoNormal"><span>联盟协议签署后怎么保证协议的有效性，协议被单方面撕毁怎么办？需要一个第三方公证处对协议内容提供证明。第三方公证处提供假证怎么办？一个不够，那就100个。</span></p>

<h3><span>什么是Unionid?</span></h3>
<p class="MsoNormal"><span>每份联盟协议都有一个相对应的全网唯一数字编号，即联盟union协议ID。Unionid为18位数字，例：<b>123456789</b>123456789，前9位为联盟公证处（下称公证处）的协议数据库编号，后9位为该协议数据库内的协议编号。</span></p>

<h3><span>获取公证处资格和协议数据库</span></h3>
<p class="MsoNormal"><span>有数据库管理能力的联盟团体均可获得。<br>
<b>第一步：</b>先根据联盟公证处开源文档搭建好自己的公证平台。<br>
<b>第二步：</b>到“联盟基金会(待成立)”登记并核实团体身份和平台功能，签署《联盟公证协议》<br>
<b>第三步：</b>由“联盟基金会(待成立)”将你的平台域名发送给其他所有公证处。<br>
<b>第四步：</b>从“联盟基金会(待成立)”下载所有公证处平台名单和协议数据库名单。<br>
<b>第五步：</b>自定义一个未使用的9位数作为自己的协议数据库ID，按文档接口要求将该ID发送给其他所有公证平台，如果没有冲突，就可以开始使用该协议数据库ID。<br></p>
<p class="MsoNormal"><span><b>注意事项：</b><br>
如果公证处本地的公证处平台名单或协议数据库名单有遗漏，重新执行第4步。<br>
一个公证处可以管理多个协议数据库，如果需要增加协议数据库，重新执行第5步。<br>
公证处有责任和义务为签署的协议内容真实性提供人证。<br>
公证处如果不能继续运营，其协议数据库必须转交给其他公证处管理。</span></p>

<h3><span>公证流程图</span></h3>
<p class="MsoNormal"><span><img border="0" width="100%" src="unionid.notary.flow.png" style="max-width:800px;" /></span></p>

<h3><span>协议的签署和公证</span></h3>
<p class="MsoNormal"><span>联盟左方：也称甲方、需求方、请求方、生产资料使用方，联盟内统称左方<br>
联盟右方：也称乙方、供应方、响应方、生产资料提供方，联盟内统称右方</span></p>
<p class="MsoNormal"><span>协议内容只有签署双方知道，公证处要在没有协议内容的情况下为协议内容提供公证。</span></p>
<p class="MsoNormal"><span><b>第一步：</b>协议的签署需要在联盟客户端进行安全校验，双方先下载联盟客户端校验身份。联盟左方或联盟右方拟好联盟协议内容，经双方确认后计算协议内容的md5值。</span></p>
<p style="color:#C00000"><span>md5值 = hash_hmac('md5', '协议内容', null)</span></p>
<p class="MsoNormal"><span><b>第二步：</b>使用联盟客户端从随机分配的“第一公证处”获取完整的18位数协议Unionid并发送给对方，联盟客户端自动将协议Unionid、内容总长度、左方Unionid、右方Unionid、签署日期以固定格式补充到协议结尾处，用md5值作密钥计算协议内容和补充内容的sha512值。</span></p>
<p style="color:#C00000"><span>sha512值 = hash_hmac('sha512', '协议内容+两个换行符+补充内容', md5值)</span></p>
<p class="MsoNormal"><span>补充内容（示例，文本格式固定，内容总长度包括补充内容，UTF-8编码一个中文3字节）：</span></p>
<p style="color:#C00000"><span>本协议Unionid：987654321123456789，内容总长度2468字节，左方Unionid：123456789123456789，右方Unionid：987654321987654321，于2024年06月18日签署。</span></p>
<p class="MsoNormal"><span>补充字段（示例，只有数字和半角逗号，5个值顺序必须保持一致）：</span></p>
<p style="color:#C00000"><span>987654321123456789,2468,123456789123456789,987654321987654321,20240618</span></p>
<p class="MsoNormal"><span><b>第三步：</b>左方将协议Unionid、内容总长度、md5左边16字节、sha512左边64字节发送给第一公证处，右方将协议Unionid、内容总长度、md5右边16字节、sha512右边64字节发送给第一公证处，用md5作密钥计算sha512值和补充字段的sha1值。</span></p>
<p style="color:#C00000"><span>sha1值 = hash_hmac('sha1', 'sha512值+补充字段', md5值)</span></p>
<p class="MsoNormal"><span><b>第四步：</b>签署双方向第一公证处再次发送协议Unionid和sha256校验值，公证处校验后返回sha256校验值，签署双方本地校验返回结果一致，表示签署完成。</span></p>
<p style="color:#C00000"><span>签署方发送sha256值 = hash_hmac('sha256', 'md5值+sha512值+sha1值', null)</span></p>
<p style="color:#C00000"><span>公证处返回sha256值 = hash_hmac('sha256', 'sha1值+sha512值+md5值', null)</span></p>
<p class="MsoNormal"><span><b>第五步：</b>签署双方将协议Unionid、内容总长度、md5左边16字节、sha512左边64字节发送给至少三个自已选择的“其他公证处”。</span></p>
<p class="MsoNormal"><span><b>第六步：</b>其他公证处接到请求后根据协议数据库ID从第一公证处获取md5右边16字节、sha512右边64位、对方用户Unionid，再拼成完整的md5值和sha512值。</span></p>
<p class="MsoNormal"><span><b>第七步：</b>签署双方向自己选择的其他公证处再次发送协议Unionid和sha256校验值，公证处校验后返回完整sha256校验值，本地校验返回结果一致，表示公证完成。</span></p>
<p class="MsoNormal"><span><b>注意事项：</b><br>
签署和公证操作超过60秒未完成会自动更换公证处，公证处完成操作后可将协议Unionid、md5值、sha1值、到期年份固化存储，其他字段必须主动删除。<br>
协议有效年数默认12年/主体60年，任何人可使用Unionid从任何一个公证处查询该联盟协议的公证状态，有效期内任何一个月如果有查询则有效年数自动增加1年，最大值为120年。</span></p>

<h3><span>公证处如何提供证明</span></h3>
<p class="MsoNormal"><span><b>当需要公证处提供证明时，主体自己需提供协议内容的原件（物证），公证处根据协议内容重复公证过程中的计算步骤，如果结果一致即可证明协议内容的真实性（人证）。</b><br>
联盟客户端会将协议内容使用主体自己的密钥加密存储在客户端本地，不会将协议内容存储到其他任何地方，主体可下载协议内容自行存储。<br>
协议内容不可修改，如需变更，必须重新签署新协议并在新协议内声明旧的协议已作废。</span></p>

<h2 style="text-align:center;"><span>结束语</span></h2>
<h3><span>公证成本控制</span></h3>
<p class="MsoNormal"><span>公证平台源代码开放使用，没什么技术含量，平台容易搭建也不太需要维护。<br>
公证处只需记录协议Unionid、md5、sha1、到期年份这四个值，所以成本非常低。数据固化后可使用更便宜的存档型数据库，成本更低。<br>
以一个协议数据库为例：9位数的协议ID最多表示10亿条数据，每条数据仅82字节，存满不足100GB，协议签署过程中没有复杂的处理，对CPU和带宽要求都不高，一台1000元以内的服务器即可满足需求，平均每1万条数据只需收入1分钱。<br>
通过低成本低门槛和稳定的收益来促使团队积极成立联盟公证处，参与团队数量越多越好，公证处也不需要保证服务器的高可用性。</span></p>

<h3><span>用户Unionid公证示例</span></h3>
<p class="MsoNormal"><span>用户Unionid是用户使用联盟签署的第一份联盟协议，用户为联盟左方，联盟客户端为联盟右方，联盟客户端向用户提供一个表单样本由用户填写，该表单即为协议内容，例如：</span></p>

<ul style="list-style-type:none;margin:0;padding:0;">
<li style="list-style-type:none;background-color:#808080;color:#D9D9D9;margin:10px;padding:10px;border-radius:20px;">
<p class="MsoNormal"><span>联盟用户注册协议（示例）<br>
左方名称：个体<br>
左方证件号码：123456789<br>
右方名称：联盟客户端团体<br>
右方证件号码：987654321</span></p>

<p class="MsoNormal"><span>用户资格：您声明您已年满法定年龄，具有使用本服务的资格。<br>
账户安全：您负责保护您的账户和密码安全，不得将账户信息透露给他人。<br>
内容所有权：本网站内容（包括文本、图片等）的版权属于原作者或其授权方所有。<br>
用户行为：您承诺不使用本网站进行任何违法活动，不发布或传播任何不当信息。<br>
免责声明：本网站不对用户使用服务过程中的任何损失承担责任。<br>
服务变更：我们保留随时修改或中断服务的权利，无需事先通知。<br>
协议修改：我们有权随时更新本协议，继续使用服务即表示接受修改后的协议。<br>
法律适用：本协议受中华人民共和国法律管辖。</span></p>

<p class="MsoNormal"><span>用户名：username<br>
邮箱：email<br>
印象最深的人或事：待补充<br>
最喜欢的影视作品：待补充<br>
最喜欢的诗歌：静夜思（李白）<br>
床前明月光，疑似地上霜。<br>
举头望明月，低头思故乡。<br>
本协议Unionid即用户Unionid，用户有了Unionid才能与其他主体签署协议。<br>
协议内容没有严格限制，用户可随意增加内容来突出协议的唯一性。<br>
用户能记住协议内自己填写的完整内容是最好的，忘记密码时可使用协议内容重置密码。</span></p>

<p class="MsoNormal"><span>本协议Unionid：123456789123456789，内容总长度1637字节，左方Unionid：123456789123456789，右方Unionid：987654321987654321，于2024年06月18日签署。</span></p>
</li>
</ul>

<p class="MsoNormal"><span>&nbsp;</span></p>
</div>